What is hermes-profile-transformer?
The hermes-profile-transformer package is designed to convert Hermes sampling profiler output to Chrome's trace event format. This allows developers to visualize and analyze performance metrics of React Native applications that use the Hermes JavaScript engine in Chrome DevTools.
What are hermes-profile-transformer's main functionalities?
Transform Hermes profile to Chrome format
This feature allows you to convert a profile file from Hermes format to a format that is compatible with Chrome DevTools. The code sample demonstrates reading a Hermes profile from a file, transforming it, and then writing the transformed profile to a new file.
const { hermesToChrome } = require('hermes-profile-transformer');
const fs = require('fs');
const hermesProfile = JSON.parse(fs.readFileSync('path-to-hermes-profile.json', 'utf-8'));
const events = hermesToChrome(hermesProfile);
fs.writeFileSync('path-to-chrome-profile.json', JSON.stringify(events), 'utf-8');
Other packages similar to hermes-profile-transformer
chrome-trace-event
A library for creating trace event logs of program execution according to Google's Trace Event format, similar to what hermes-profile-transformer outputs. It does not convert from Hermes format, but it can be used to generate Chrome-compatible traces programmatically.
speedscope
A fast, interactive web-based viewer for performance profiles. While it does not convert Hermes profiles, it can import various profile formats and export them to a format that is viewable within its own interface, offering an alternative to Chrome DevTools for performance analysis.
cpuprofilify
This package can convert output from various profiling tools to the .cpuprofile format used by Chrome DevTools. It is similar to hermes-profile-transformer in that it enables the analysis of profiles in Chrome, but it supports a wider range of input formats.
Hermes Profile Transformer
Visualize Facebook's Hermes JavaScript runtime profile traces in Chrome Developer Tools.
Overview
The Hermes runtime, used by React Native for Android, is able to output Chrome Trace Events in JSON Object Format.
This TypeScript package converts Hermes CPU profiles to Chrome Developer Tools compatible JSON Array Format, and enriches it with line and column numbers and event categories from JavaScript source maps.
Usage
If you're using hermes-profile-transformer
to debug React Native Android applications, you can use the React Native CLI react-native profile-hermes
command, which uses this package to convert the downloaded Hermes profiles automatically.
As a standalone package
const transformer = require('hermes-profile-transformer').default;
const { promises } = require('fs');
const hermesCpuProfilePath = './testprofile.cpuprofile';
const sourceMapPath = './index.map';
const sourceMapBundleFileName = 'index.bundle.js';
transformer(
hermesCpuProfilePath,
sourceMap,
sourceMapBundleFileName
)
.then(events => {
return promises.writeFile(
'./chrome-supported.json',
JSON.stringify(events, null, 2),
'utf-8'
);
})
.catch(err => {
console.log(err);
});
Creating Hermes CPU Profiles
Opening converted profiles in Chrome Developer Tools
Open Developer Tools in Chrome, navigate to the Performance tab, and use the Load profile... feature.
API
transformer(profilePath: string, sourceMapPath?: string, bundleFileName?: string)
Parameters
Parameter | Type | Required | Description |
---|
profilePath | string | Yes | Path to a JSON-formatted .cpuprofile file created by the Hermes runtime |
sourceMapPath | string | No | Path to a source-map compatible Source Map file |
bundleFileName | string | No | If sourceMapPath is provided, you need to also provide the name of the JavaScript bundle file that the source map applies to. This file does not need to exist on disk. |
Returns
Promise<DurationEvent[]>
, where DurationEvent
is as defined in EventInterfaces.ts.
Resources
LICENSE
MIT